說明過了XML的使用、安全、檢視、編輯、轉換和驗證,接著要進入比較細節的部份,本篇的主題是介紹文件的結構。
以上圖所顯示的 XML 來說明,可以發現到除了第一列的 <?xml version="1.0"?> 之外,其他的部份是一個很典型的樹狀結構。
其中最上層的,稱為此文件的 Root ,在此例中為 <ipo:purchaseOrder> ,而各元素彼此之間的關係,有 Parent-Child 關係(例如:<ipo:purchaseOrder> 和<shipTo> 、 <Items> 和 <item> 以及 <item> 和 <price> ),也有所謂的Sibling關係(例如: <shipTo> 和 <billTo> )。
若以另一種方式來表達,會類似下圖:
看到這種樹狀結構,對於程式開發人員而言,由於不像 RDBMS 或一般以行列區隔資料的格式。要取得其中的資料,如果使用傳統的文字檔處理方式(例:先 Find 幾個 Keyword,再用 Substring 去切字串),這將會是一件苦差事。
而 XML 提供了很方便而強大的查詢方式,叫做 XPath,你可以把他類比成在查詢 RDBMS 時所使用的 SELECT 指令,如果熟悉使用的話,更可以將 XML 的好處發揮出來。其使用方式也是透過一個現成的工具程式,不用自己寫的工具程式。
基本上 XPath 是以「描述資料所在位置的路徑」的方式來查詢資料,以本文中提的 XML 為例,舉幾個最簡單的例子如下,應該很容易看的懂才是:
XPath : /ipo:purchaseOrder/@orderDate
回傳:2011-09-28
XPath:/ipo:purchaseOrder/shipTo/name
回傳:Helen Zoe
XPath:/ipo:purchaseOrder/Items/item[1]/@partNum
回傳:811-AA
XPath:/ipo:purchaseOrder/Items/item[2]/productName
回傳:Funny Toys
XPath:/ipo:purchaseOrder/Items/item[3]/price
回傳:128.99
以 php 來寫,大概像這樣
$xpath = new DOMXPath($doc);
$arrname = $xpath->query("/ipo:purchaseOrder/shipTo/name"); '傳入 XPath
foreach ($arrname as $myname) {
echo $myname->nodeValue." "; '回傳值
}
'執行結果就是回傳
'Helen Zoe